#!/bin/bash

# USO: GlogY <comando> <tipo> <mensaje>
# $1: Comando invocante
# $2: Tipo severidad (I|W|E|SE)
# $3: Mensaje (max longitud 120 caracteres)

# Retornos:
# 0: Exito
# 1: Cantidad argumentos incorrecta
# 2: Comando invocante desconocido
# 3: Tipo de severidad incorrecta
# 4: Longitud de mensaje excedida
# 5: No se pudo crear el directorio de log

# Verificacion cantidad de parametros
if [ $# -ne 3 ]; then
	exit 1
fi

# Verificacion comando a loguear
if [ $1 != "InstalY" ] && [ $1 != "InicioY" ] && [ $1 != "DetectaY" ] && [ $1 != "Interprete" ] && [ $1 != "StartY" ] && [ $1 != "StopY" ] && [ $1 != "MoverY" ]; then
	exit 2
fi

# Verificacion tipo de severidad existente
case "$2" in
	I)
		QUE="INFORMATIVO";;
	W)
		QUE="ADVERTENCIA";;
	E)
		QUE="ERROR";;
	SE)
		QUE="ERROR SEVERO";;
	*)
		exit 3;;
esac

# Verificacion longitud del mensaje
if [ $#3 -gt 120 ]; then
	exit 4
fi

if [ $1 == "InstalY" ]; then
	# Configuracion especial para el log del InstalY
	LOG_FILE=${INSTALY_LOG}
else
	let LOG_SIZE=1024*$LOGSIZE
	LOG_FILE="${LOGDIR}/${1}.${LOGEXT}"

	# Verificacion existencia de directorio
	if [ ! -d "$LOGDIR" ]; then
		# Si no existe el directorio, lo creo
		mkdir "$LOGDIR"
		if [ $? -ne 0 ]; then
			exit 5
		fi
	fi
fi

MAX_LONG_MSJ=120
QUIEN=$(whoami)
CUANDO=$(date "+%d/%m/%Y %H:%M:%S")
DONDE="$1"
PORQUE="$3"

# Verificacion existencia de archivo
if [ ! -f "${LOG_FILE}" ]; then
	# Si no existe el archivo de log para ese comando, lo creo
	> "${LOG_FILE}"
fi

# Verifico el tamaño del log
if [ $1 != "InstalY" ] && [ $(wc -c "${LOG_FILE}" | cut -f1 -d" ") -gt $LOG_SIZE ]; then
	# Reduzco el log a 1/3
	echo "$CUANDO - Log excedido" >> "${LOG_FILE}"
	let NRO_LINEAS=$(wc -l "${LOG_FILE}" | cut -f1 -d" ")*2/3
	sed -i "1,${NRO_LINEAS}d" "${LOG_FILE}"
fi

# Agrego el registro al log
echo "$CUANDO - $QUIEN - $DONDE - $QUE - $PORQUE" >> "${LOG_FILE}"

exit 0
